Java 平台系统梳理
Java 是由 Sun Microsystems(后被 Oracle 收购)于 1995 年发布的面向对象编程语言及运行时平台。其核心设计理念是 "Write Once, Run Anywhere"(一次编写,到处运行),通过 Java 虚拟机(JVM)实现跨平台能力。当前 Java SE 最新版本为 26(2026),LTS 版本包括 8、11、17、21。
平台组成:Java 平台 = JDK(开发工具包)⊃ JRE(运行环境)⊃ JVM(虚拟机)。JDK 包含编译器(javac)、JRE 包含类库,JVM 执行字节码。
| 版本 | 代号 | 发布时间 | 关键特性 |
|---|---|---|---|
| Java 8 | LTS | 2014.03 | Lambda、Stream API、Optional、新日期API |
| Java 11 | LTS | 2018.09 | HTTP Client、模块化强化、ZGC |
| Java 17 | LTS | 2021.09 | 密封类、Pattern Matching、Records、FFI |
| Java 21 | LTS | 2023.09 | 虚拟线程(Virtual Threads)、Record Patterns、字符串模板 |
| Java 26 | Current | 2026.03 | 分代 ZGC、结构化并发(Stable)、值类型(Preview) |
2. 行为图(系统做什么)
从开发者与系统交互的角度,递进展示 Java 平台的核心行为流程。
2.1 用例图 — Java 平台用户场景
展示 Java 平台的主要参与者及其用例:开发者编写代码、编译、运行、调试、部署等核心场景。
图 1:Java 平台用例图
// Demo:开发者典型工作流
// 1. 编写源码
public class Hello { public static void main(String[] a) { System.out.println("Hello"); } }
// 2. 编译
// $ javac Hello.java
// 3. 运行
// $ java Hello
2.2 活动图 — Java 源码到执行全流程
展示从 .java 源文件到 CPU 执行的完整流水线:编译 → 类加载 → 字节码验证 → 解释执行/JIT 编译 → GC 管理。
图 2:Java 源码到执行的活动图(带泳道)
2.3 状态机图 — JVM 线程生命周期
JVM 线程从创建到终止经历 6 种状态,受操作系统调度和 Java 并发 API(wait/notify、LockSupport、synchronized)驱动。
图 3:JVM 线程生命周期状态机
// Demo:线程状态转换演示
Thread t = new Thread(() -> {
try { Thread.sleep(1000); } // TIMED_WAITING
catch (InterruptedException e) {}
synchronized (lock) { lock.wait(); } // WAITING
});
t.start(); // NEW → RUNNABLE
t.join(); // 主线程 WAITING
2.4 序列图 — HotSpot JVM 方法调用过程
展示 Java 方法调用在 JVM 内部的完整协作流程,包括类加载、字节码解释/编译、JNI 调用机制。
图 4:JVM 方法调用序列图
3. 结构图(系统由什么组成)
从宏观架构到内部细节,递进展示 Java 平台的静态组织结构。
3.1 组件图 — JVM 内部架构
JVM(HotSpot 实现)主要由三大子系统组成:类加载子系统、运行时数据区、执行引擎。
图 5:JVM 内部组件图
运行时数据区:堆(Heap)存放对象实例,所有线程共享;栈(Stack)存放局部变量/操作数栈,每个线程私有;方法区(Metaspace)存放类元数据;程序计数器记录当前执行指令地址;本地方法栈服务于 Native 方法。
3.2 包图 — Java SE 21 模块系统
Java 9 引入模块化系统(Project Jigsaw),JDK 自身拆分为 70+ 模块,以 java.base 为根模块。
图 6:Java SE 21 核心模块包图
| 模块 | 核心包 | 用途 |
|---|---|---|
| java.base | java.lang, java.util, java.io, java.math | 基础 API,所有模块的根 |
| java.desktop | java.awt, javax.swing | GUI 开发 |
| java.sql | java.sql, javax.sql | JDBC 数据库访问 |
| java.logging | java.util.logging | 核心日志框架 |
| java.net.http | java.net.http | HTTP/2 与 WebSocket 客户端 |
| jdk.compiler | com.sun.source.*, javax.tools | javac 编译器实现 |
3.3 类图 — Java 核心类层次
展示 Java 语言核心类型体系的继承、实现与组合关系。
图 7:Java 核心类层次类图
// Demo:核心类型的使用
String s = "hello"; // java.lang.String (final)
List<String> list = new ArrayList<>(); // java.util 集合框架
list.add(s);
list.stream().filter(x -> x.length() > 3) // Stream API (Java 8)
.forEach(System.out::println); // 方法引用
3.4 部署图 — 典型 Java 应用生产部署
展示 Spring Boot 微服务架构的典型物理部署拓扑。
图 8:Java 微服务生产部署图
4. 使用手册
4.1 安装 JDK
推荐使用 Eclipse Adoptium(开源 OpenJDK 构建版)或 Oracle JDK。
# macOS (Homebrew) brew install openjdk@21 # Ubuntu/Debian sudo apt install openjdk-21-jdk # 验证安装 java --version javac --version
4.2 第一个 Java 程序
// Hello.java
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, Java!");
}
}
# 编译与运行 javac Hello.java # → Hello.class java Hello # 输出: Hello, Java! # Java 11+ 可直接运行单文件 java Hello.java # 输出: Hello, Java!
4.3 构建工具
| 工具 | 配置文件 | 特点 |
|---|---|---|
| Maven | pom.xml | 约定优于配置,依赖管理、生命周期、插件生态 |
| Gradle | build.gradle (.kts) | 灵活 DSL、增量构建、性能优于 Maven |
| Ant | build.xml | 传统,已逐渐被替代 |
// Maven pom.xml 最小示例
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>3.3.0</version>
</dependency>
</dependencies>
</project>
4.4 核心语言特性
| 特性 | 引入版本 | 说明 |
|---|---|---|
| 面向对象(OOP) | Java 1.0 | 类、继承、多态、封装、接口、抽象类 |
| 泛型(Generics) | Java 5 | 编译期类型安全检查,消除强制转型 |
| Lambda 表达式 | Java 8 | 函数式编程,简化匿名类,配合 Stream API |
| Stream API | Java 8 | 声明式集合操作:filter/map/reduce/collect |
| 模块系统(Jigsaw) | Java 9 | module-info.java,强封装,定制 JRE 镜像(jlink) |
| var 局部类型推断 | Java 10 | var list = new ArrayList<String>() |
| Records | Java 14(Preview) / 16 | 不可变数据载体,自动生成 equals/hashCode/toString |
| Sealed Classes | Java 15(Preview) / 17 | 限制可继承的子类范围 |
| Virtual Threads | Java 19(Preview) / 21 | 轻量级虚拟线程,高并发低成本(Project Loom) |
| Pattern Matching | Java 16-21 | instanceof 增强、switch 模式匹配、record pattern |
| 字符串模板 | Java 21(Preview) | STR."Hello \{name}" 字符串插值 |
4.5 最佳实践
编码规范
- 类名 PascalCase,方法/变量 camelCase,常量 UPPER_SNAKE
- 遵循 Google Java Style Guide
- 接口优于抽象类,组合优于继承
- 使用 Optional 替代 null 返回
- 资源用 try-with-resources 自动关闭
- 用 enum 替代魔法常量
性能调优
- 选择合适 GC:G1(平衡)、ZGC(低延迟)、Parallel(吞吐量)
- 合理设置堆大小:-Xms / -Xmx
- 使用 -XX:+UseStringDeduplication 减少重复字符串
- JDK Flight Recorder (JFR) + JDK Mission Control (JMC) 诊断性能
- 虚拟线程替代线程池处理高 I/O 场景
常用 JDK 工具:
jps(列出 JVM 进程)、jstack(线程 dump)、jmap(堆 dump)、jstat(GC 统计)、jcmd(诊断命令)、jlink(定制运行时镜像)、jpackage(打包原生安装包)、jshell(REPL 交互式编程)